export class MCTS {
  constructor(node) {
    this.node = node;
  }

  tree_policy() {
    // 选择、扩展
    let curNode = this.node;

    while (!curNode.is_terminal_node()) {
      if (!curNode.is_full_expanded()) {
        return curNode.expand();
      } else {
        curNode = curNode.best_child(); // 综合考量
      }
    }
    return curNode;
  }

  best_action(sNumber) {
    for (let i = 0; i < sNumber; i++) {
      const tryNode = this.tree_policy();
      const reward = tryNode.rollout(); // 实际返回的是结局胜、负的对象
      tryNode.back(reward);
    }

    // 这里只选平均收益最大的
    return this.node.best_child(0);
  }
}
